IF EXISTS (SELECT * FROM SYSOBJECTS WHERE name='spRpt_CompromisoSolicitud' and XTYPE='P')
BEGIN
	DROP PROCEDURE [dbo].[spRpt_CompromisoSolicitud]
END
GO
CREATE PROCEDURE [dbo].[spRpt_CompromisoSolicitud]
	 @OP VARCHAR(64)=NULL
	,@ParamAuxiliar NVARCHAR(MAX)=NULL
	--,@Id INT=NULL
	,@CodSolicitud_Ini VARCHAR(16)=NULL
	,@CodSolicitud_Fin VARCHAR(16)=NULL
	,@CodPresupuesto_Ini VARCHAR(16)=NULL
	,@CodPresupuesto_Fin VARCHAR(16)=NULL
	,@CodOrdenCompra_Ini VARCHAR(8)=NULL
	,@CodOrdenCompra_Fin VARCHAR(8)=NULL
	,@CodContrato_Ini VARCHAR(16)=NULL
	,@CodContrato_Fin VARCHAR(16)=NULL
WITH ENCRYPTION
AS
SET NOCOUNT ON;
BEGIN TRY

/*****     IMPRIMIR    *****/
IF @OP = 'Imprimir'
BEGIN
	SELECT 
		 @CodSolicitud_Ini=CASE WHEN @CodSolicitud_Ini IS NULL OR  RTRIM(@CodSolicitud_Ini)='' THEN REPLICATE(' ',16) ELSE @CodSolicitud_Ini END
		,@CodSolicitud_Fin=CASE WHEN @CodSolicitud_Fin IS NULL OR  RTRIM(@CodSolicitud_Fin)='' THEN REPLICATE('Z',16) ELSE @CodSolicitud_Fin END
		,@CodPresupuesto_Ini=CASE WHEN @CodPresupuesto_Ini IS NULL OR  RTRIM(@CodPresupuesto_Ini)='' THEN REPLICATE(' ',16) ELSE @CodPresupuesto_Ini END
		,@CodPresupuesto_Fin=CASE WHEN @CodPresupuesto_Fin IS NULL OR  RTRIM(@CodPresupuesto_Fin)='' THEN REPLICATE('Z',16) ELSE @CodPresupuesto_Fin END
		,@CodOrdenCompra_Ini=CASE WHEN @CodOrdenCompra_Ini IS NULL OR  RTRIM(@CodOrdenCompra_Ini)='' THEN REPLICATE(' ',8) ELSE @CodOrdenCompra_Ini END
		,@CodOrdenCompra_Fin=CASE WHEN @CodOrdenCompra_Fin IS NULL OR  RTRIM(@CodOrdenCompra_Fin)='' THEN REPLICATE('Z',8) ELSE @CodOrdenCompra_Fin END
		,@CodContrato_Ini=CASE WHEN @CodContrato_Ini IS NULL OR  RTRIM(@CodContrato_Ini)='' THEN REPLICATE(' ',16) ELSE @CodContrato_Ini END
		,@CodContrato_Fin=CASE WHEN @CodContrato_Fin IS NULL OR  RTRIM(@CodContrato_Fin)='' THEN REPLICATE('Z',16) ELSE @CodContrato_Fin END

	SELECT
		 [CodPresupuesto] AS [CODIGO PRESUPUESTO]
		,[CodSolicitud] AS [CODIGO]
		,[CodOrdenCompra] AS [CODIGO OC]
		,[FechaSolicitud] AS [CODIGO CONTRATO]
		,[Estado] AS [ESTADO]
		,[Usuario] AS [USUARIO CREACION]
		,[Observaciones] AS [OBSERVACIONES]		
	FROM
		[dbo].[CompromisoSolicitud] t1
	WHERE
		t1.CodSolicitud BETWEEN @CodSolicitud_Ini AND @CodSolicitud_Fin
		AND t1.CodPresupuesto BETWEEN @CodPresupuesto_Ini AND @CodPresupuesto_Fin
		AND ISNULL(t1.CodOrdenCompra,'') BETWEEN @CodOrdenCompra_Ini AND @CodOrdenCompra_Fin
		AND ISNULL(t1.CodContrato,'') BETWEEN @CodContrato_Ini AND @CodContrato_Fin
	RETURN 0
END

--- Si se llega a este punto es porque el @OP indicado no Existe en el Procedimiento Almacenado
IF @OP IS NOT NULL
	BEGIN
	SET @ParamAuxiliar='La Operacion "'+@OP+'" No esta definida en el Procedimiento almacenado "'+OBJECT_NAME(@@PROCID)+'", Revise!.'
	RAISERROR(@ParamAuxiliar,16,1)
	RETURN 1
END

--- CONTROLAR Y REGISTRAR LOS ERRORES
END TRY
BEGIN CATCH
	--- Recopilo la informacion del error
	DECLARE @ERROR_NUMBER INT=ERROR_NUMBER(),@ERROR_SEVERITY INT=ERROR_SEVERITY(),@ERROR_STATE INT=ERROR_STATE(),@ERROR_PROCEDURE VARCHAR(128)=ERROR_PROCEDURE(),@ERROR_LINE INT=ERROR_LINE(),@ERROR_MESSAGE VARCHAR(2048)=ERROR_MESSAGE()
	--- Si hay transacciones abiertas, hago un rollback, SE ENCIERRA EN UN (TRY-CATCH) PARA QUE NO SE MUESTRE EL ERROR: Transaction count after EXECUTE indicates a mismatching number of BEGIN and COMMIT
	IF(@@TRANCOUNT>0) BEGIN BEGIN TRY ROLLBACK TRANSACTION END TRY BEGIN CATCH END CATCH END
	--- Ejecuto el SP que controla y registra el error
	EXEC [spSeguridadMessageException] @OP='MostrarMensaje',@ERROR_NUMBER=@ERROR_NUMBER,@ERROR_SEVERITY=@ERROR_SEVERITY,@ERROR_STATE=@ERROR_STATE,@ERROR_PROCEDURE=@ERROR_PROCEDURE,@ERROR_LINE=@ERROR_LINE,@ERROR_MESSAGE=@ERROR_MESSAGE
	RETURN 1
END CATCH;


